import { applyDecorators } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
import { Decorator_Public_Base } from './public';
import { OperationObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';

/**
 * @description
 * 自定义装饰器，用于为 API 添加 Swagger 注释和 JWT 验证。
 * 1. 使用 Swagger 注释 API 并在 Swagger 界面中自动携带 Authorization 头。
 * 2. 控制真实接口 API 调用时是否进行 JWT 验证。
 * @example
 * // 为登录接口添加 Swagger 注释，并且不需要 JWT 验证
 * @Decorator_ApiOperatione_Base({ summary: '登录' }, true)
 * @param {Partial<OperationObject>} optionApiOperation - Swagger 注释选项。
 * @param {boolean} [noAuth=false] - 是否不需要 JWT 验证。默认为 false。
 * @returns {ReturnType<typeof applyDecorators>} - 返回应用的装饰器。
 */
export function Decorator_ApiOperatione_Base(
  optionApiOperation: Partial<OperationObject>,
  noAuth?: boolean,
): ReturnType<typeof applyDecorators> {
  // const noAuth = [
  //   '/auth/signIn Post',
  //   '/web/dynamic Get',
  //   '/web/dynamic/:id Get',
  //   '/web/imgd Get',
  //   '/web/platform Get',
  //   '/web/platformsort Get',
  //   '/web/authUser Post',
  //   '/common/smsService Post',
  //   '/common/email Post',
  //   '/web/specsTypeWeb Get',
  //   '/payCallBack Post',
  //   '/wechat/login Post',
  //   '/wechat/callback Get',
  // ];
  if (noAuth) {
    return applyDecorators(ApiOperation(optionApiOperation), Decorator_Public_Base());
  } else {
    return applyDecorators(ApiOperation(optionApiOperation), ApiBearerAuth());
  }
}
